home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 October: Mac OS SDK / Dev.CD Oct 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / CIncludes / DriverServices.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-12  |  17.3 KB  |  682 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        DriverServices.h
  3.  
  4.      Contains:    Driver Services Interfaces.
  5.  
  6.      Version:    Technology:    PowerSurge 1.0.2 and beyond (including Copland)
  7.                  Release:    Universal Interfaces 3.0.1
  8.  
  9.      Copyright:    © 1985-1997 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. */
  18. #ifndef __DRIVERSERVICES__
  19. #define __DRIVERSERVICES__
  20.  
  21. #ifndef __CONDITIONALMACROS__
  22. #include <ConditionalMacros.h>
  23. #endif
  24. #ifndef __TYPES__
  25. #include <Types.h>
  26. #endif
  27. #ifndef __ERRORS__
  28. #include <Errors.h>
  29. #endif
  30. #ifndef __MACHINEEXCEPTIONS__
  31. #include <MachineExceptions.h>
  32. #endif
  33. #ifndef __DEVICES__
  34. #include <Devices.h>
  35. #endif
  36. #ifndef __DRIVERSYNCHRONIZATION__
  37. #include <DriverSynchronization.h>
  38. #endif
  39.  
  40.  
  41.  
  42. #if PRAGMA_ONCE
  43. #pragma once
  44. #endif
  45.  
  46. #ifdef __cplusplus
  47. extern "C" {
  48. #endif
  49.  
  50. #if PRAGMA_IMPORT
  51. #pragma import on
  52. #endif
  53.  
  54. #if PRAGMA_STRUCT_ALIGN
  55.     #pragma options align=power
  56. #elif PRAGMA_STRUCT_PACKPUSH
  57.     #pragma pack(push, 2)
  58. #elif PRAGMA_STRUCT_PACK
  59.     #pragma pack(2)
  60. #endif
  61.  
  62. /******************************************************************
  63.  *
  64.  *         Previously in Kernel.h
  65.  *
  66.  ******************************************************************/
  67. /* Kernel basics*/
  68. typedef struct OpaqueIOPreparationID*     IOPreparationID;
  69. typedef struct OpaqueSoftwareInterruptID*  SoftwareInterruptID;
  70. typedef struct OpaqueTaskID*             TaskID;
  71. typedef struct OpaqueTimerID*             TimerID;
  72. /* OrderedItem stuff*/
  73. typedef OSType                             OrderedItemService;
  74. typedef OSType                             OrderedItemSignature;
  75.  
  76. enum {
  77.     kMatchAnyOrderedItemService    = FOUR_CHAR_CODE('****'),
  78.     kMatchAnyOrderedItemSignature = FOUR_CHAR_CODE('****'),
  79.     kDoNotMatchAnyOrderedItemService = FOUR_CHAR_CODE('----'),
  80.     kDoNotMatchAnyOrderedItemSignature = FOUR_CHAR_CODE('----')
  81. };
  82.  
  83. struct OrderedItemName {
  84.     OrderedItemService                 service;
  85.     OrderedItemSignature             signature;
  86. };
  87. typedef struct OrderedItemName OrderedItemName;
  88.  
  89. typedef OrderedItemName *                OrderedItemNamePtr;
  90. typedef OptionBits                         OrderedItemOptions;
  91.  
  92. enum {
  93.     kOrderedItemIsRightBefore    = 0x00000001,
  94.     kOrderedItemIsRightAfter    = 0x00000002
  95. };
  96.  
  97. struct OrderRequirements {
  98.     OrderedItemOptions                 options;
  99.     OrderedItemName                 itemBefore;
  100.     OrderedItemName                 itemAfter;
  101. };
  102. typedef struct OrderRequirements OrderRequirements;
  103.  
  104. typedef OrderRequirements *                OrderRequirementsPtr;
  105. /* Tasking*/
  106. typedef UInt32                             ExecutionLevel;
  107.  
  108. enum {
  109.     kTaskLevel                    = 0,
  110.     kSoftwareInterruptLevel        = 1,
  111.     kAcceptFunctionLevel        = 2,
  112.     kKernelLevel                = 3,
  113.     kSIHAcceptFunctionLevel        = 4,
  114.     kSecondaryInterruptLevel    = 5,
  115.     kHardwareInterruptLevel        = 6
  116. };
  117.  
  118. typedef CALLBACK_API_C( void , SoftwareInterruptHandler )(void *p1, void *p2);
  119. typedef CALLBACK_API_C( OSStatus , SecondaryInterruptHandler2 )(void *p1, void *p2);
  120. #define kCurrentAddressSpaceID ((AddressSpaceID) -1)
  121.  
  122. /* Memory System basics*/
  123. struct LogicalAddressRange {
  124.     LogicalAddress                     address;
  125.     ByteCount                         count;
  126. };
  127. typedef struct LogicalAddressRange LogicalAddressRange;
  128.  
  129. typedef LogicalAddressRange *            LogicalAddressRangePtr;
  130. struct PhysicalAddressRange {
  131.     PhysicalAddress                 address;
  132.     ByteCount                         count;
  133. };
  134. typedef struct PhysicalAddressRange PhysicalAddressRange;
  135.  
  136. typedef PhysicalAddressRange *            PhysicalAddressRangePtr;
  137. /* For PrepareMemoryForIO and CheckpointIO*/
  138. typedef OptionBits                         IOPreparationOptions;
  139.  
  140. enum {
  141.     kIOMultipleRanges            = 0x00000001,
  142.     kIOLogicalRanges            = 0x00000002,
  143.     kIOMinimalLogicalMapping    = 0x00000004,
  144.     kIOShareMappingTables        = 0x00000008,
  145.     kIOIsInput                    = 0x00000010,
  146.     kIOIsOutput                    = 0x00000020,
  147.     kIOCoherentDataPath            = 0x00000040,
  148.     kIOTransferIsLogical        = 0x00000080,
  149.     kIOClientIsUserMode            = 0x00000080
  150. };
  151.  
  152. typedef OptionBits                         IOPreparationState;
  153.  
  154. enum {
  155.     kIOStateDone                = 0x00000001
  156. };
  157.  
  158.  
  159. enum {
  160.     kInvalidPageAddress            = (-1)
  161. };
  162.  
  163. struct AddressRange {
  164.     void *                            base;
  165.     ByteCount                         length;
  166. };
  167. typedef struct AddressRange AddressRange;
  168.  
  169. /* C's treatment of arrays and array pointers is atypical*/
  170. typedef LogicalAddress *                LogicalMappingTablePtr;
  171. typedef PhysicalAddress *                PhysicalMappingTablePtr;
  172. typedef AddressRange *                    AddressRangeTablePtr;
  173. struct MultipleAddressRange {
  174.     ItemCount                         entryCount;
  175.     AddressRangeTablePtr             rangeTable;
  176. };
  177. typedef struct MultipleAddressRange MultipleAddressRange;
  178.  
  179. /*
  180.    Separate C definition so that union has a name.  A future version of the interfacer
  181.    tool will allow a name (that gets thrown out in Pascal and Asm).
  182. */
  183. struct IOPreparationTable {
  184.     IOPreparationOptions             options;
  185.     IOPreparationState                 state;
  186.     IOPreparationID                 preparationID;
  187.     AddressSpaceID                     addressSpace;
  188.     ByteCount                         granularity;
  189.     ByteCount                         firstPrepared;
  190.     ByteCount                         lengthPrepared;
  191.     ItemCount                         mappingEntryCount;
  192.     LogicalMappingTablePtr             logicalMapping;
  193.     PhysicalMappingTablePtr         physicalMapping;
  194.     union {
  195.         AddressRange                     range;
  196.         MultipleAddressRange             multipleRanges;
  197.     }                                 rangeInfo;
  198. };
  199. typedef struct IOPreparationTable IOPreparationTable;
  200.  
  201. typedef OptionBits                         IOCheckpointOptions;
  202.  
  203. enum {
  204.     kNextIOIsInput                = 0x00000001,
  205.     kNextIOIsOutput                = 0x00000002,
  206.     kMoreIOTransfers            = 0x00000004
  207. };
  208.  
  209. /* For SetProcessorCacheMode*/
  210.  
  211. typedef UInt32                             ProcessorCacheMode;
  212.  
  213. enum {
  214.     kProcessorCacheModeDefault    = 0,
  215.     kProcessorCacheModeInhibited = 1,
  216.     kProcessorCacheModeWriteThrough = 2,
  217.     kProcessorCacheModeCopyBack    = 3
  218. };
  219.  
  220. /* For GetPageInformation*/
  221.  
  222.  
  223. enum {
  224.     kPageInformationVersion        = 1
  225. };
  226.  
  227. typedef UInt32                             PageStateInformation;
  228.  
  229. enum {
  230.     kPageIsProtected            = 0x00000001,
  231.     kPageIsProtectedPrivileged    = 0x00000002,
  232.     kPageIsModified                = 0x00000004,
  233.     kPageIsReferenced            = 0x00000008,
  234.     kPageIsLockedResident        = 0x00000010,
  235.     kPageIsInMemory                = 0x00000020,
  236.     kPageIsShared                = 0x00000040,
  237.     kPageIsWriteThroughCached    = 0x00000080,
  238.     kPageIsCopyBackCached        = 0x00000100,
  239.     kPageIsLocked                = kPageIsLockedResident,        /* Deprecated*/
  240.     kPageIsResident                = kPageIsInMemory                /* Deprecated*/
  241. };
  242.  
  243. struct PageInformation {
  244.     AreaID                             area;
  245.     ItemCount                         count;
  246.     PageStateInformation             information[1];
  247. };
  248. typedef struct PageInformation PageInformation;
  249.  
  250. typedef PageInformation *                PageInformationPtr;
  251.  
  252. /*  Tasks  */
  253. EXTERN_API_C( ExecutionLevel )
  254. CurrentExecutionLevel            (void);
  255.  
  256. EXTERN_API_C( TaskID )
  257. CurrentTaskID                    (void);
  258.  
  259. EXTERN_API_C( OSStatus )
  260. DelayFor                        (Duration                 delayDuration);
  261.  
  262. EXTERN_API_C( Boolean )
  263. InPrivilegedMode                (void);
  264.  
  265.  
  266. /*  Software Interrupts  */
  267. EXTERN_API_C( OSStatus )
  268. CreateSoftwareInterrupt            (SoftwareInterruptHandler  handler,
  269.                                  TaskID                 task,
  270.                                  void *                    p1,
  271.                                  Boolean                 persistent,
  272.                                  SoftwareInterruptID *    theSoftwareInterrupt);
  273.  
  274.  
  275. EXTERN_API_C( OSStatus )
  276. SendSoftwareInterrupt            (SoftwareInterruptID     theSoftwareInterrupt,
  277.                                  void *                    p2);
  278.  
  279. EXTERN_API_C( OSStatus )
  280. DeleteSoftwareInterrupt            (SoftwareInterruptID     theSoftwareInterrupt);
  281.  
  282. /*  Secondary Interrupts  */
  283. EXTERN_API_C( OSStatus )
  284. CallSecondaryInterruptHandler2    (SecondaryInterruptHandler2  theHandler,
  285.                                  ExceptionHandler         exceptionHandler,
  286.                                  void *                    p1,
  287.                                  void *                    p2);
  288.  
  289. EXTERN_API_C( OSStatus )
  290. QueueSecondaryInterruptHandler    (SecondaryInterruptHandler2  theHandler,
  291.                                  ExceptionHandler         exceptionHandler,
  292.                                  void *                    p1,
  293.                                  void *                    p2);
  294.  
  295.  
  296. /*  Timers  */
  297. EXTERN_API_C( OSStatus )
  298. SetInterruptTimer                (const AbsoluteTime *    expirationTime,
  299.                                  SecondaryInterruptHandler2  handler,
  300.                                  void *                    p1,
  301.                                  TimerID *                theTimer);
  302.  
  303. EXTERN_API_C( OSStatus )
  304. CancelTimer                        (TimerID                 theTimer,
  305.                                  AbsoluteTime *            timeRemaining);
  306.  
  307.  
  308. /*  I/O related Operations  */
  309. EXTERN_API_C( OSStatus )
  310. PrepareMemoryForIO                (IOPreparationTable *    theIOPreparationTable);
  311.  
  312. EXTERN_API_C( OSStatus )
  313. CheckpointIO                    (IOPreparationID         theIOPreparation,
  314.                                  IOCheckpointOptions     options);
  315.  
  316.  
  317. /*  Memory Operations  */
  318. EXTERN_API_C( OSStatus )
  319. GetPageInformation                (AddressSpaceID         addressSpace,
  320.                                  ConstLogicalAddress     base,
  321.                                  ItemCount                 requestedPages,
  322.                                  PBVersion                 version,
  323.                                  PageInformation *        thePageInfo);
  324.  
  325. /*  Processor Cache Related  */
  326. EXTERN_API_C( OSStatus )
  327. SetProcessorCacheMode            (AddressSpaceID         addressSpace,
  328.                                  ConstLogicalAddress     base,
  329.                                  ByteCount                 length,
  330.                                  ProcessorCacheMode     cacheMode);
  331.  
  332. /******************************************************************
  333.  *
  334.  *         Was in DriverSupport.h or DriverServices.h
  335.  *
  336.  ******************************************************************/
  337. #define    kAAPLDeviceLogicalAddress "AAPL,address"
  338. typedef LogicalAddress *                DeviceLogicalAddressPtr;
  339.  
  340. enum {
  341.     durationMicrosecond            = -1L,                            /* Microseconds are negative*/
  342.     durationMillisecond            = 1L,                            /* Milliseconds are positive*/
  343.     durationSecond                = 1000L,                        /* 1000 * durationMillisecond*/
  344.     durationMinute                = 60000L,                        /* 60 * durationSecond,*/
  345.     durationHour                = 3600000L,                        /* 60 * durationMinute,*/
  346.     durationDay                    = 86400000L,                    /* 24 * durationHour,*/
  347.     durationNoWait                = 0L,                            /* don't block*/
  348.     durationForever                = 0x7FFFFFFF                    /* no time limit*/
  349. };
  350.  
  351.  
  352. enum {
  353.     k8BitAccess                    = 0,                            /* access as 8 bit*/
  354.     k16BitAccess                = 1,                            /* access as 16 bit*/
  355.     k32BitAccess                = 2                                /* access as 32 bit*/
  356. };
  357.  
  358. typedef UnsignedWide                     Nanoseconds;
  359.  
  360. EXTERN_API_C( OSErr )
  361. IOCommandIsComplete                (IOCommandID             theID,
  362.                                  OSErr                     theResult);
  363.  
  364. EXTERN_API_C( OSErr )
  365. GetIOCommandInfo                (IOCommandID             theID,
  366.                                  IOCommandContents *    theContents,
  367.                                  IOCommandCode *        theCommand,
  368.                                  IOCommandKind *        theKind);
  369.  
  370. EXTERN_API_C( void )
  371. UpdateDeviceActivity            (RegEntryID *            deviceEntry);
  372.  
  373. EXTERN_API_C( void )
  374. BlockCopy                        (const void *            srcPtr,
  375.                                  void *                    destPtr,
  376.                                  Size                     byteCount);
  377.  
  378. EXTERN_API_C( LogicalAddress )
  379. PoolAllocateResident            (ByteCount                 byteSize,
  380.                                  Boolean                 clear);
  381.  
  382. EXTERN_API_C( OSStatus )
  383. PoolDeallocate                    (LogicalAddress         address);
  384.  
  385. EXTERN_API_C( ByteCount )
  386. GetLogicalPageSize                (void);
  387.  
  388. EXTERN_API_C( ByteCount )
  389. GetDataCacheLineSize            (void);
  390.  
  391. EXTERN_API_C( OSStatus )
  392. FlushProcessorCache                (AddressSpaceID         spaceID,
  393.                                  LogicalAddress         base,
  394.                                  ByteCount                 length);
  395.  
  396. EXTERN_API_C( LogicalAddress )
  397. MemAllocatePhysicallyContiguous    (ByteCount                 byteSize,
  398.                                  Boolean                 clear);
  399.  
  400. EXTERN_API_C( OSStatus )
  401. MemDeallocatePhysicallyContiguous (LogicalAddress         address);
  402.  
  403.  
  404. EXTERN_API_C( AbsoluteTime )
  405. UpTime                            (void);
  406.  
  407. EXTERN_API_C( void )
  408. GetTimeBaseInfo                    (UInt32 *                minAbsoluteTimeDelta,
  409.                                  UInt32 *                theAbsoluteTimeToNanosecondNumerator,
  410.                                  UInt32 *                theAbsoluteTimeToNanosecondDenominator,
  411.                                  UInt32 *                theProcessorToAbsoluteTimeNumerator,
  412.                                  UInt32 *                theProcessorToAbsoluteTimeDenominator);
  413.  
  414.  
  415. EXTERN_API_C( Nanoseconds )
  416. AbsoluteToNanoseconds            (AbsoluteTime             absoluteTime);
  417.  
  418. EXTERN_API_C( Duration )
  419. AbsoluteToDuration                (AbsoluteTime             absoluteTime);
  420.  
  421. EXTERN_API_C( AbsoluteTime )
  422. NanosecondsToAbsolute            (Nanoseconds             nanoseconds);
  423.  
  424. EXTERN_API_C( AbsoluteTime )
  425. DurationToAbsolute                (Duration                 duration);
  426.  
  427. EXTERN_API_C( AbsoluteTime )
  428. AddAbsoluteToAbsolute            (AbsoluteTime             absoluteTime1,
  429.                                  AbsoluteTime             absoluteTime2);
  430.  
  431. EXTERN_API_C( AbsoluteTime )
  432. SubAbsoluteFromAbsolute            (AbsoluteTime             leftAbsoluteTime,
  433.                                  AbsoluteTime             rightAbsoluteTime);
  434.  
  435. EXTERN_API_C( AbsoluteTime )
  436. AddNanosecondsToAbsolute        (Nanoseconds             nanoseconds,
  437.                                  AbsoluteTime             absoluteTime);
  438.  
  439. EXTERN_API_C( AbsoluteTime )
  440. AddDurationToAbsolute            (Duration                 duration,
  441.                                  AbsoluteTime             absoluteTime);
  442.  
  443. EXTERN_API_C( AbsoluteTime )
  444. SubNanosecondsFromAbsolute        (Nanoseconds             nanoseconds,
  445.                                  AbsoluteTime             absoluteTime);
  446.  
  447. EXTERN_API_C( AbsoluteTime )
  448. SubDurationFromAbsolute            (Duration                 duration,
  449.                                  AbsoluteTime             absoluteTime);
  450.  
  451. EXTERN_API_C( Nanoseconds )
  452. AbsoluteDeltaToNanoseconds        (AbsoluteTime             leftAbsoluteTime,
  453.                                  AbsoluteTime             rightAbsoluteTime);
  454.  
  455. EXTERN_API_C( Duration )
  456. AbsoluteDeltaToDuration            (AbsoluteTime             leftAbsoluteTime,
  457.                                  AbsoluteTime             rightAbsoluteTime);
  458.  
  459. EXTERN_API_C( Nanoseconds )
  460. DurationToNanoseconds            (Duration                 theDuration);
  461.  
  462. EXTERN_API_C( Duration )
  463. NanosecondsToDuration            (Nanoseconds             theNanoseconds);
  464.  
  465.  
  466. EXTERN_API_C( OSErr )
  467. PBQueueInit                        (QHdrPtr                 qHeader);
  468.  
  469. EXTERN_API_C( OSErr )
  470. PBQueueCreate                    (QHdrPtr *                qHeader);
  471.  
  472. EXTERN_API_C( OSErr )
  473. PBQueueDelete                    (QHdrPtr                 qHeader);
  474.  
  475. EXTERN_API_C( void )
  476. PBEnqueue                        (QElemPtr                 qElement,
  477.                                  QHdrPtr                 qHeader);
  478.  
  479. EXTERN_API_C( OSErr )
  480. PBEnqueueLast                    (QElemPtr                 qElement,
  481.                                  QHdrPtr                 qHeader);
  482.  
  483. EXTERN_API_C( OSErr )
  484. PBDequeue                        (QElemPtr                 qElement,
  485.                                  QHdrPtr                 qHeader);
  486.  
  487. EXTERN_API_C( OSErr )
  488. PBDequeueFirst                    (QHdrPtr                 qHeader,
  489.                                  QElemPtr *                theFirstqElem);
  490.  
  491. EXTERN_API_C( OSErr )
  492. PBDequeueLast                    (QHdrPtr                 qHeader,
  493.                                  QElemPtr *                theLastqElem);
  494.  
  495. EXTERN_API_C( char *)
  496. CStrCopy                        (char *                    dst,
  497.                                  const char *            src);
  498.  
  499. EXTERN_API_C( StringPtr )
  500. PStrCopy                        (StringPtr                 dst,
  501.                                  ConstStr255Param         src);
  502.  
  503. EXTERN_API_C( char *)
  504. CStrNCopy                        (char *                    dst,
  505.                                  const char *            src,
  506.                                  UInt32                 max);
  507.  
  508. EXTERN_API_C( StringPtr )
  509. PStrNCopy                        (StringPtr                 dst,
  510.                                  ConstStr255Param         src,
  511.                                  UInt32                 max);
  512.  
  513. EXTERN_API_C( char *)
  514. CStrCat                            (char *                    dst,
  515.                                  const char *            src);
  516.  
  517. EXTERN_API_C( StringPtr )
  518. PStrCat                            (StringPtr                 dst,
  519.                                  ConstStr255Param         src);
  520.  
  521. EXTERN_API_C( char *)
  522. CStrNCat                        (char *                    dst,
  523.                                  const char *            src,
  524.                                  UInt32                 max);
  525.  
  526. EXTERN_API_C( StringPtr )
  527. PStrNCat                        (StringPtr                 dst,
  528.                                  ConstStr255Param         src,
  529.                                  UInt32                 max);
  530.  
  531. EXTERN_API_C( void )
  532. PStrToCStr                        (char *                    dst,
  533.                                  ConstStr255Param         src);
  534.  
  535. EXTERN_API_C( void )
  536. CStrToPStr                        (Str255                 dst,
  537.                                  const char *            src);
  538.  
  539. EXTERN_API_C( SInt16 )
  540. CStrCmp                            (const char *            s1,
  541.                                  const char *            s2);
  542.  
  543. EXTERN_API_C( SInt16 )
  544. PStrCmp                            (ConstStr255Param         str1,
  545.                                  ConstStr255Param         str2);
  546.  
  547. EXTERN_API_C( SInt16 )
  548. CStrNCmp                        (const char *            s1,
  549.                                  const char *            s2,
  550.                                  UInt32                 max);
  551.  
  552. EXTERN_API_C( SInt16 )
  553. PStrNCmp                        (ConstStr255Param         str1,
  554.                                  ConstStr255Param         str2,
  555.                                  UInt32                 max);
  556.  
  557. EXTERN_API_C( UInt32 )
  558. CStrLen                            (const char *            src);
  559.  
  560. EXTERN_API_C( UInt32 )
  561. PStrLen                            (ConstStr255Param         src);
  562.  
  563. EXTERN_API_C( OSStatus )
  564. DeviceProbe                        (void *                    theSrc,
  565.                                  void *                    theDest,
  566.                                  UInt32                 AccessType);
  567.  
  568. EXTERN_API_C( OSStatus )
  569. DelayForHardware                (AbsoluteTime             absoluteTime);
  570.  
  571.  
  572.  
  573. /******************************************************************
  574.  *
  575.  *         Was in Interrupts.h 
  576.  *
  577.  ******************************************************************/
  578. /*  Interrupt types  */
  579. typedef struct OpaqueInterruptSetID*     InterruptSetID;
  580. typedef long                             InterruptMemberNumber;
  581. struct InterruptSetMember {
  582.     InterruptSetID                     setID;
  583.     InterruptMemberNumber             member;
  584. };
  585. typedef struct InterruptSetMember InterruptSetMember;
  586.  
  587.  
  588. enum {
  589.     kISTChipInterruptSource        = 0,
  590.     kISTOutputDMAInterruptSource = 1,
  591.     kISTInputDMAInterruptSource    = 2,
  592.     kISTPropertyMemberCount        = 3
  593. };
  594.  
  595. typedef InterruptSetMember                 ISTProperty[3];
  596. #define kISTPropertyName    "driver-ist" 
  597.  
  598. typedef long                             InterruptReturnValue;
  599.  
  600. enum {
  601.     kFirstMemberNumber            = 1,
  602.     kIsrIsComplete                = 0,
  603.     kIsrIsNotComplete            = -1,
  604.     kMemberNumberParent            = -2
  605. };
  606.  
  607. typedef Boolean                         InterruptSourceState;
  608.  
  609. enum {
  610.     kSourceWasEnabled            = true,
  611.     kSourceWasDisabled            = false
  612. };
  613.  
  614.  
  615. typedef CALLBACK_API_C( InterruptMemberNumber , InterruptHandler )(InterruptSetMember ISTmember, void *refCon, UInt32 theIntCount);
  616. typedef CALLBACK_API_C( void , InterruptEnabler )(InterruptSetMember ISTmember, void *refCon);
  617. typedef CALLBACK_API_C( InterruptSourceState , InterruptDisabler )(InterruptSetMember ISTmember, void *refCon);
  618.  
  619. enum {
  620.     kReturnToParentWhenComplete    = 0x00000001,
  621.     kReturnToParentWhenNotComplete = 0x00000002
  622. };
  623.  
  624. typedef OptionBits                         InterruptSetOptions;
  625. /*  Interrupt Services  */
  626. EXTERN_API_C( OSStatus )
  627. CreateInterruptSet                (InterruptSetID         parentSet,
  628.                                  InterruptMemberNumber     parentMember,
  629.                                  InterruptMemberNumber     setSize,
  630.                                  InterruptSetID *        setID,
  631.                                  InterruptSetOptions     options);
  632.  
  633.  
  634. EXTERN_API_C( OSStatus )
  635. InstallInterruptFunctions        (InterruptSetID         setID,
  636.                                  InterruptMemberNumber     member,
  637.                                  void *                    refCon,
  638.                                  InterruptHandler         handlerFunction,
  639.                                  InterruptEnabler         enableFunction,
  640.                                  InterruptDisabler         disableFunction);
  641.  
  642.  
  643. EXTERN_API_C( OSStatus )
  644. GetInterruptFunctions            (InterruptSetID         setID,
  645.                                  InterruptMemberNumber     member,
  646.                                  void **                refCon,
  647.                                  InterruptHandler *        handlerFunction,
  648.                                  InterruptEnabler *        enableFunction,
  649.                                  InterruptDisabler *    disableFunction);
  650.  
  651. EXTERN_API_C( OSStatus )
  652. ChangeInterruptSetOptions        (InterruptSetID         setID,
  653.                                  InterruptSetOptions     options);
  654.  
  655. EXTERN_API_C( OSStatus )
  656. GetInterruptSetOptions            (InterruptSetID         setID,
  657.                                  InterruptSetOptions *    options);
  658.  
  659.  
  660.  
  661.  
  662. #if PRAGMA_STRUCT_ALIGN
  663.     #pragma options align=reset
  664. #elif PRAGMA_STRUCT_PACKPUSH
  665.     #pragma pack(pop)
  666. #elif PRAGMA_STRUCT_PACK
  667.     #pragma pack()
  668. #endif
  669.  
  670. #ifdef PRAGMA_IMPORT_OFF
  671. #pragma import off
  672. #elif PRAGMA_IMPORT
  673. #pragma import reset
  674. #endif
  675.  
  676. #ifdef __cplusplus
  677. }
  678. #endif
  679.  
  680. #endif /* __DRIVERSERVICES__ */
  681.  
  682.